
package main

import (
	"fmt"
	"bytes"
	"reflect"
)

type struc struct {
	a []byte
	b [64]byte
}

func main () {
	var b bytes.Buffer
	fmt.Println(b)

	var aa struc
	fmt.Println(aa)

	fmt.Println(reflect.TypeOf(aa.a))
	fmt.Println(reflect.TypeOf(aa.b))
	fmt.Println(aa.a == nil)

	var bb []byte
	var cc [64]byte

	bb = cc[0:24]
	fmt.Println(bb)
	fmt.Println(cc)
	fmt.Println(reflect.TypeOf(bb))
	fmt.Println(reflect.TypeOf(cc))
	// 切片的地址就是对应截取的数组元素的地址
	fmt.Printf("%p",bb)
	fmt.Println()
	fmt.Println(&cc[0])


	buf1 := bytes.NewBufferString("wift") 
	buf2:=bytes.NewBuffer([]byte("swift")) 
	buf3:=bytes.NewBuffer([]byte{'s','w','i','f','t'}) 
	fmt.Println("===========以下buf1,buf2,buf3等效=========") 
	fmt.Println("buf1:", buf1) 
	fmt.Println("buf2:", buf2) 
	fmt.Println("buf3:", buf3) 
	fmt.Println("===========以下创建空的缓冲器等效=========") 
	buf4:=bytes.NewBufferString("") 
	buf5:=bytes.NewBuffer([]byte{}) 
	fmt.Println("buf4:", buf4) 
	fmt.Println("buf5:", buf5) 


	fmt.Println("===========以下通过Write把swift写入Learning缓冲器尾部=========") 
	newBytes := []byte("swift") 
	//创建一个内容Learning的缓冲器 
	buf6 := bytes.NewBuffer([]byte("Learning")) 
	//打印为Learning 
	fmt.Println(buf6.String()) 
	//将newBytes这个slice写到buf的尾部 
	buf6.Write(newBytes) 
	fmt.Println(buf6.String()) 

	fmt.Println("===========以下通过WriteString把swift写入Learning缓冲器尾部=========") 
	newString := "swift" 
	//创建一个string内容Learning的缓冲器 
	buf7 := bytes.NewBufferString("Learning") 
	//打印为Learning 
	fmt.Println(buf7.String()) 
	//将newString这个string写到buf的尾部 
	buf7.WriteString(newString) 
	fmt.Println(buf7.String())

	fmt.Println("===========以下通过WriteByte把!写入Learning缓冲器尾部=========") 
	var newByte byte = '!'
	//创建一个string内容Learning的缓冲器 
	buf8 := bytes.NewBufferString("Learning") 
	//打印为Learning 
	fmt.Println(buf8.String()) 
	//将newString这个string写到buf的尾部 
	buf8.WriteByte(newByte) 
	fmt.Println(buf8.String())

	fmt.Println("===========以下通过WriteRune把\"好\"写入Learning缓冲器尾部=========") 
	var newRune = '好'
	//创建一个string内容Learning的缓冲器 
	buf := bytes.NewBufferString("Learning") 
	//打印为Learning 
	fmt.Println(buf.String()) 
	//将newString这个string写到buf的尾部 
	buf.WriteRune(newRune) 
	fmt.Println(buf.String())


	bufs := bytes.NewBufferString("Learning swift.") 
	fmt.Println(bufs.String())
	//声明一个空的slice,容量为8
	l := make([]byte, 8)
	//把bufs的内容读入到l内,因为l容量为8,所以只读了8个过来
	bufs.Read(l)
	fmt.Println("::bufs缓冲器内容::")
	fmt.Println(bufs.String())
	//空的l被写入了8个字符,所以为 Learning
	fmt.Println("::l的slice内容::")
	fmt.Println(string(l))
	//把bufs的内容读入到l内,原来的l的内容被覆盖了
	bufs.Read(l)
	fmt.Println("::bufs缓冲器被第二次读取后剩余的内容::")
	fmt.Println(bufs.String())
	fmt.Println("::l的slice内容被覆盖,由于bufs只有7个了,因此最后一个g被留下来了::")
	fmt.Println(string(l))


	bufs2 := bytes.NewBufferString("学swift.") 
	//读取第一个rune,赋值给r
	r,z,_ := bufs2.ReadRune()
	//打印中文"学",缓冲器头部第一个被拿走
	fmt.Println(bufs2.String())
	//打印"学","学"作为utf8储存占3个byte
	fmt.Println("r=",string(r),",z=",z)
	fmt.Println(bufs2.String())

	bufs3 := bytes.NewBufferString("现在开始 Learning swift.") 
	fmt.Println(bufs3.String())
	var delim byte = 'L'
	line, _ := bufs3.ReadBytes(delim)
	fmt.Println(bufs3.String())
	fmt.Println(string(line))

	bufs4 := bytes.NewBufferString("现在开始 Learning swift.") 
	fmt.Println(bufs4.String())
	bufs4.Reset()
	fmt.Println("::已经清空了bufs的缓冲内容::")
	fmt.Println(bufs4.String())
}

func ReadBytes(){ 
	bufs := bytes.NewBufferString("现在开始 Learning swift.") 
	fmt.Println(bufs.String())

}
